/**
 * @file
 * @description 公共库
 */


/**
 * @method
 * @description 深拷贝
 * @param {Object} source 源对象（要拷贝的对象）
 */
export const deepClone = (source) => {
  const dest = Array.isArray(source) ? [] : {} //目标对象

  /**
   * @param {Object} dst 目标数据（要拷贝的对象上）
   * @param {Object} sour 源数据（要拷贝的对象）
   */
  const deep = (dst, sour) => {
    for (const key in sour) {
      if (Object.hasOwnProperty.call(sour, key)) {
        const item = sour[key]

        if (item instanceof RegExp) {
          dst[key] = new RegExp(item)
        } else if (item instanceof Date) {
          dst[key] = new Date(item)
        } else if (typeof item === 'function') {
          dst[key] = item
        } else if (item instanceof Object) {
          deep(dst[key] = Array.isArray(item) ? [] : {}, item)
        } else {
          dst[key] = item
        }
      }
    }
  }
  deep(dest, source)
  return dest;
}

// /**
//  * @method
//  * @description 自定义递归深拷贝
//  * @param {Object} source 原对象（要拷贝的对象）
//  */
//  export const deepClone = (source) => {
//   const newObj = Array.isArray(source) ? [] : {} //新对象（目标对象）
//   /**
//    * @method
//    * @description 深度克隆1
//    * @param {Object} dest 目标对象
//    * @param {Object} sour 原对象
//    */
//   const clone = (dest, sour) => {
//     for (const key in sour) {
//       if (Object.hasOwnProperty.call(sour, key)) {
//         const item = sour[key];
//         if (item instanceof RegExp) {
//           dest[key] = new RegExp(item)
//         } else if (item instanceof Date) {
//           dest[key] = new Date(item)
//         } else if (item instanceof Object) {
//           clone(dest[key] = Array.isArray(item) ? [] : {}, item)
//         } else {
//           dest[key] = item;
//         }
//       }
//     }
//   }
//   clone(newObj, source)
//   return newObj
// }